package com.cskaoyan.javase.array._1basic;

/**
 * 数组的基本操作
 *
 * int[] arr = new int[3];
 * 直接打印输出arr会得到字符串: [I@1540e19d
 * "["表示该变量是一个数组类型
 * "I"表示该数组是int类型数组
 * "1540e19d"是一个十六进制数
 *
 * arr是一个局部变量，这里创建的是一个局部变量数组
 * arr这个数组名会直接在方法的栈帧中开辟空间存储它
 * new关键字表示在堆上创建对象，创建一个长度为3的int类型数组对象
 * "="的作用,是让对象名和对象之间产生关联
 * 数组是典型的引用数据类型,通过数组的初始化,我们可以简单来了解一下引用数据类型
 *
 * 总结:
 *      1.arr是一个局部变量，需要在栈上开辟空间存储它。我们把它称之为引用数据类型的引用，简称引用。
 *      创建局部变量数组时,引用会存储在方法栈帧中.
 *      如果不是局部变量数组,引用有可能不存储在栈上.
 *
 *      2.new关键字表示创建对象，在堆上开辟一片空间创建一个长度位3的int数组对象。
 *      无论什么情况下,对象始终存储在堆上.
 * 很明显：
 *      引用数据类型的变量是由“引用 + 对象”的两部分组成的。
 *      其中，对象是引用数据类型的实质，用来引用数据类型变量的具体信息（数据）。
 *      但显然，我们没有办法直接访问对象，只能通过引用间接的访问对象。这是因为：
 * 引用通过存储对象的地址，和对象的产生了联系。引用并不存储引用数据类型变量的具体数据信息。
 *
 * @since 10:21
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 动态初始化一个int数组
        int[] arr = new int[3];
        // int类型数组中的元素默认值是0
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        // 数组元素的赋值
        arr[0] = 100;
        System.out.println(arr[0]);

        // 数组的长度
        System.out.println(arr.length);

        // 直接输出数组名
        System.out.println(arr);
    }
}
